package com.ozo.cloud.manage.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ozo.cloud.api.manage.vo.SysUserInfoVO;
import com.ozo.cloud.api.manage.vo.SysUserVO;
import com.ozo.cloud.common.base.model.BasePage;
import com.ozo.cloud.common.base.model.BaseBatchDTO;
import com.ozo.cloud.common.base.model.PageResult;
import com.ozo.cloud.manage.pojo.dto.*;
import com.ozo.cloud.manage.entity.SysUser;

import java.util.List;

/**
 * <p>
 * 用户 服务类
 * </p>
 *
 * @author qiangesoft
 * @since 2024-07-11
 */
public interface ISysUserService extends IService<SysUser> {

    /**
     * 添加用户
     *
     * @param saveDTO
     */
    void add(SysUserSaveDTO saveDTO);

    /**
     * 删除用户
     *
     * @param batchDTO
     */
    void remove(BaseBatchDTO<Long> batchDTO);

    /**
     * 编辑用户
     *
     * @param saveDTO
     */
    void edit(SysUserSaveDTO saveDTO);

    /**
     * 用户分页
     *
     * @param basePage
     * @param queryDTO
     */
    PageResult<SysUserVO> page(BasePage basePage, SysUserQueryDTO queryDTO);

    /**
     * 重置密码
     *
     * @param batchDTO
     */
    void resetPwd(BaseBatchDTO<Long> batchDTO);

    /**
     * 修改状态
     *
     * @param statusDTO
     */
    void changeStatus(ChangeStatusDTO statusDTO);

    /**
     * 通过用户名查询用户
     *
     * @param username
     * @return
     */
    SysUserInfoVO getByUsername(String username);

    /**
     * 通过手机号查询用户
     *
     * @param mobile
     * @return
     */
    SysUserInfoVO getByMobile(String mobile);

    /**
     * 通过id查询用户
     *
     * @param id
     * @return
     */
    SysUserInfoVO getByUserId(Long id);

    /**
     * 查询所有用户
     *
     * @return
     */
    List<SysUserInfoVO> listAll();

    /**
     * 修改个人密码
     *
     * @param passwordDTO
     */
    void updatePwd(UserPasswordDTO passwordDTO);

    /**
     * 修改个人信息
     *
     * @param editDTO
     */
    void updateInfo(UserEditDTO editDTO);

    /**
     * 注册账号
     *
     * @param username
     * @param password
     * @param nickname
     */
    void register(String username, String password, String nickname);

}
